home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Games of Daze
/
Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso
/
x2ftp
/
msdos
/
libs
/
ctask22d
/
tsio.c
< prev
next >
Wrap
C/C++ Source or Header
|
1990-10-12
|
3KB
|
151 lines
/*
Test program for checking the CTask serial I/O interface.
*/
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#include <process.h>
#include "tsk.h"
#include "sio.h"
#include "tsksup.h"
#define PORT 0x80 /* COM1, relative */
#define BAUD 9600L /* Baudrate */
#define STACKSIZE 2048
unsigned int _stklen = 4 * STACKSIZE; /* For Turbo C: Two tasks + main Task Stack */
tcb tcb1, tcb2, tcb3;
flag halt;
sioptr siop;
word rcvbuf [10000];
byte xmtbuf [100];
int endrun, err;
/*
Task 1 reads characters from the serial line and displays them on
the screen. While the halt flag is set, characters are not read,
so the XON/XOFF and RTS/CTS protocol can be tested for the receiving
side.
*/
void far task1 (void)
{
word ch;
printf ("Task 1 started\n");
while (!endrun)
{
wait_flag_clear (&halt, 0L);
if (endrun)
return;
ch = v24_receive (siop, 0L);
putch (ch);
if (ch & 0xff00)
{
err = 1;
printf ("\n%c*%02x*", ch, ch >> 8);
}
}
}
/*
Task 2 reads characters from the keyboard and sends them to the
serial port. If 'h' is entered, the halt flag is set, so task1
stops reading. If 'c' is entered, the halt flag is cleared.
Entering 'e' stops the program.
'd' outputs snapshot dump.
*/
void far task2 (void)
{
int ch;
printf ("Task 2 started\n");
while (!endrun)
{
ch = t_read_key () & 0xff;
switch (tolower (ch))
{
case 'h': set_flag (&halt);
puts ("-halt-");
break;
case 'c': clear_flag (&halt);
err = 0;
puts ("-continue-");
break;
case 'e': puts ("-end-");
endrun = 1;
clear_flag (&halt);
wake_task (NULL);
break;
#if (TSK_NAMED)
case 'd': snapshot (stdout);
break;
#endif
default: /* putch (ch); */
v24_send (siop, (byte)ch, 0L);
break;
}
}
}
int main (void)
{
char stack1 [STACKSIZE];
char stack2 [STACKSIZE];
endrun = 0;
install_tasker (0, 0, IFL_STD, "TSIO");
siop = v24_install (PORT, 1, rcvbuf, sizeof (rcvbuf), xmtbuf, sizeof (xmtbuf));
if (siop == NULL)
{
remove_tasker ();
printf ("Couldn't install COM-Port\n");
exit (1);
}
v24_change_baud (siop, BAUD);
v24_protocol (siop, XONXOFF | RTSCTS, 40, 60);
create_task (&tcb1, task1, stack1, STACKSIZE, PRI_STD, NULL TN("TASK1"));
create_task (&tcb2, task2, stack2, STACKSIZE, PRI_STD, NULL TN("TASK2"));
create_flag (&halt TN("Halt"));
start_task (&tcb1);
start_task (&tcb2);
preempt_on ();
t_delay (0L);
endrun = 1;
puts ("******** Main Task *********");
set_priority (NULL, 10);
schedule ();
delete_flag (&halt);
preempt_off ();
v24_remove (siop, 1);
remove_tasker ();
puts ("******** End Run *********");
return 0;
}